! function(w){//加载更多插件
	"use strict";
	if(w._hcinits==undefined){console.log('_win load _hcinits fail');return false;}
	var doc=document;
	var _uploads={
		'upobjid':null,
		'upobjinput':null,
		'upstarttime':0,//开始上传时间
		'uploadedfilesize':0,//当前上传加载文件大小
		'upcurspeed':'',//上传剩余时间
		'returnbackfunc':null,//回调函数
		'xmlhttp':null,
		'iframedocument':null,
		'upfiletarget':0,//当前上传第几个
		'upfileNumber':0,//每次上传文件数
		'upfiledata':{},//返回的数据集合
		'upfileobjfiles':null,
		'postdata':{
			'changestarttime':null,//change开始上传时间
		},//post 上传其他参数
		'config':{
			'upId':'uploadone',
			'upfilemore':10,//一次上传文件最大数量
			'iframeId':'hcinits_upload_iframe',
			'formid':'frm',
			'formTarget':'hcinits_form_target',
			'formAction':null,
			'formInputFileNameStatus':true,//false name 值类似为upload true 为upload[] 
			'formInputFileName':'uploadfield',//上传name值
			'formInputFileMultiple':false,//是否多图上传
			'singleuploadisall':true,//上传多个文件是一次上传还是分开上传
			'formInputFileAccept':false,//input file accept
			'formInputButtonCleanUpName':'hcinits_upload_form_clean',//取消上传name值
			'ajaxasync':true,//ajax异步true上传和同步false
			'startcleanstatus':false,//开启取消上传按钮
			'upProgressstatus':false,//是否开启进度
			'uploadbefer':false,//开始加装
		},
		'initdiv':function(config,postdata,returnbacks){
			var t=this,iframehtml='',formhtml='',d=t.device();
			for(var k in config){t.config[k] = config[k];}
			for(var k in postdata){t.postdata[k] = postdata[k];}
			t.upobjid=doc.getElementById(t.config.upId);
			if(d.broswer=='IE' && d.version<10){//ie
				t.upobjid.innerHTML='IE版本太低,请使用ie10及以上';
				return false;
			}
			t.returnbackfunc=returnbacks;//回调函数
			var getfilefrom=t.getFileFrom();
			t.upobjid.innerHTML=getfilefrom;
			t.upobjinput=doc.getElementsByName(t.config.formInputFileName)[0];
			if(t.config.startcleanstatus==true){
				var fileuploadclean=doc.getElementsByName(t.config.formInputButtonCleanUpName);//取消上传
				fileuploadclean[0].onclick=function(){
					t.upClean();
				}
			}
			t.upobjinput.onchange=function(){
				t.upfiledata={};//每次选择文件初始化
				t.upfiletarget=0;//每次选择文件初始化
				t.upfileobjfiles=t.upobjinput.files;
				t.upfileNumber=t.upfileobjfiles.length;
				if(t.upfileNumber<=0){//没有上传信息
					return false;
				}
				if(t.upfileNumber>t.config.upfilemore){
					alert('上传文件超过允许上传的最大数量'+t.config.upfilemore);
					return false;
				}
				if(t.config.singleuploadisall===true){
					t.singleuploadajaxsall();
				}else{
					t.upajaxs();
				}
			} 
		},
		'initiframe':function(config,postdata,returnbacks){
			var t=this,iframehtml='',formhtml='',d=t.device();
			for(var k in config){t.config[k] = config[k];}
			for(var k in postdata){t.postdata[k] = postdata[k];}
			t.upobjid=doc.getElementById(t.config.upId);
			if(d.broswer=='IE' && d.version<10){//ie
				t.upobjid.innerHTML='IE版本太低,请使用ie10及以上';
				return false;
			}
			t.returnbackfunc=returnbacks;//回调函数
			iframehtml+='<iframe id="' + t.config.iframeId + '"  name="' + t.config.iframeId + '" frameborder="0"></iframe>';
			doc.getElementById(t.config.upId).innerHTML=iframehtml;
			t.iframedocument=doc.getElementsByName(t.config.iframeId)[0].contentWindow.document;//$('#'+t.config.iframeId)[0].contentWindow.document;
			var getfilefrom=t.getFileFrom();
			t.iframedocument.write(getfilefrom);
			t.upobjinput=t.iframedocument.getElementsByName(t.config.formInputFileName)[0];//获取上传标签html
			if(t.config.startcleanstatus==true){
				var fileuploadclean=t.iframedocument.getElementsByName(t.config.formInputButtonCleanUpName);//取消上传
				fileuploadclean[0].onclick=function(){
					t.upClean();
				}
			}
			t.upobjinput.onchange=function(){
				t.upfiledata={};
				t.upfileobjfiles=t.upobjinput.files;
				t.upfileNumber=t.upfileobjfiles.length;
				if(t.upfileNumber<=0){//没有上传信息
					return false;
				}
				if(t.upfileNumber>t.config.upfilemore){
					alert('上传文件超过允许上传的最大数量'+t.config.upfilemore);
					return false;
				}
				if(t.config.singleuploadisall===true){
					t.singleuploadajaxsall();
				}else{
					t.upajaxs();
				}
			}
			t.iframedocument.close();
		},
		'getFileFrom':function(){
			var t=this,formhtml='',d=t.device(),a=t.config.formInputFileAccept===false ? '' : 'accept="'+t.config.formInputFileAccept+'"',m=t.config.formInputFileMultiple===true?'multiple':'';
			formhtml+='<input value="上传" class="'+t.config.formInputFileName+'" type="file" name="'+t.config.formInputFileName+'" '+m+' '+a+'>';
			if(t.config.startcleanstatus===true){
				formhtml+='<input value="取消上传" class="'+t.config.formInputButtonCleanUpName+'" type="button" name="'+t.config.formInputButtonCleanUpName+'" >';
			}
			return formhtml;
		},
		'singleuploadajaxsall':function(){
			//一次上传所有的
			var t=this,i;
			var formobj = new FormData(); // FormData 对象
			for(i=0;i<t.upfileNumber;i++){
				if(t.config.formInputFileNameStatus===true){
					formobj.append(t.config.formInputFileName,t.upfileobjfiles[i]);
				}else{
					formobj.append(t.config.formInputFileName+i,t.upfileobjfiles[i]);
				}
			}
			t.upobjinput.value=null;//清除上传选择
			for(var k in t.postdata){//post 上传其他参数
				formobj.append(k,t.postdata[k]);
			}
			formobj.append('changestarttime',Date.parse(new Date())/1000);
			t.xmlhttp=new XMLHttpRequest();
			t.xmlhttp.open("post",t.config.formAction,true);
			t.xmlhttp.onload =t.singleupComplete;
			t.xmlhttp.onerror =t.upFailed; //请求失败
			if(t.config.upProgressstatus===true){
				t.xmlhttp.upload.onprogress=t.upProgress;
			}
			if(t.config.uploadbefer===true){
				t.xmlhttp.upload.onloadstart = function(){//上传开始执行方法
					t.upstarttime= new Date().getTime();   //设置上传开始时间
					t.uploadedfilesize = 0;//设置上传开始时，以上传的文件大小为0
				};
			}
			t.xmlhttp.send(formobj); 
		},
		'singleupComplete':function(e){
			var t=_uploads;
			
			if(e.target.status==200){
				var returndata=e.target.responseText;
				t.upfiledata[t.upfiletarget]=returndata;
				t.returnbackfunc(t.upfiledata);
				//t.upobjinput.value=null;
			}else{
				alert('status:'+e.target.status);
			}
		},
		'upajaxs':function(){
			var t=this;
			var formobj = new FormData(); // FormData 对象
			formobj.append(t.config.formInputFileName+t.upfiletarget, t.upfileobjfiles[t.upfiletarget]); // 文件对象
			if(t.upfileNumber==t.upfiletarget+1){//最后一个上传
				t.upobjinput.value=null;//清除上传选择
			}
			for(var k in t.postdata){//post 上传其他参数
				formobj.append(k,t.postdata[k]);
			}
			formobj.append('changestarttime',Date.parse(new Date())/1000);
			t.xmlhttp=new XMLHttpRequest();
			t.xmlhttp.open("post",t.config.formAction,true);
			t.xmlhttp.onload =t.upComplete;
			t.xmlhttp.onerror =t.upFailed; //请求失败
			if(t.config.upProgressstatus===true){
				t.xmlhttp.upload.onprogress=t.upProgress;
			}
			if(t.config.uploadbefer===true){
				t.xmlhttp.upload.onloadstart = function(){//上传开始执行方法
					t.upstarttime= new Date().getTime();   //设置上传开始时间
					t.uploadedfilesize = 0;//设置上传开始时，以上传的文件大小为0
				};
			}
			t.xmlhttp.send(formobj); 
		},
		'upClean':function(){
			//取消上传
			this.xmlhttp.abort();
		},
		//上传完成
		'upComplete':function(e){//请求完成
			var t=_uploads;
			if(e.target.status==200){
				var returndata=e.target.responseText;
				t.upfiledata[t.upfiletarget]=returndata;
				if(t.upfileNumber==t.upfiletarget+1){//最后一个上传
					t.returnbackfunc(t.upfiledata);
					//t.upobjinput.value=null;
				}else{
					t.upfiletarget=t.upfiletarget+1;
					t.upajaxs(t.upfileobjfiles,t.upfiletarget);
				}
				
			}else{
				alert('status:'+e.target.status);
			}
		},
		'upFailed':function(e){
			alert('XMLHttpRequest.status:'+e.target.status);
		},
		'upProgress':function(e){//进度处理
			var t=this;
			//t.upfiletarget 来判断哪一个上传显示进度
			 // event.total是需要传输的总字节，event.loaded是已经传输的字节。如果event.lengthComputable不为真，则event.total等于0
			if(e.lengthComputable) {
				t.upcurprogressend= Math.round(e.loaded / e.total * 100) + "%";
				//进度值
			}else{
				t.upcurprogressend=0;
			}
			console.log(t.upcurprogressend);
			/* var curtime = new Date().getTime();//获取当前时间
			var pertime = (curtime-t.upstarttime)/1000; //计算出上次调用该方法时到现在的时间差，单位为s
			t.upstarttime = new Date().getTime(); //重新赋值时间，用于下次计算
			var perload = evt.loaded - t.uploadedfilesize; //计算该分段上传的文件大小，单位b       
			t.uploadedfilesize = evt.loaded;//重新赋值已上传文件大小，用以下次计算
			//上传速度计算
			var speed = perload/pertime;//单位b/s
			var bspeed = speed;
			var units = 'b/s';//单位名称
			if(speed/1024>1){
				speed = speed/1024;
				units = 'k/s';
			}
			if(speed/1024>1){
				speed = speed/1024;
				units = 'M/s';
			}
			speed = speed.toFixed(1);
			//剩余时间
			var resttime = ((evt.total-evt.loaded)/bspeed).toFixed(1);
			t.upcurspeed = '，速度：'+speed+units+'，剩余时间：'+resttime+'s';
			if(bspeed==0){}
			time.innerHTML = '上传已取消'; */
		},
		'cleanfievalue':function(){
			var t=this;
			t.iframedocument.getElementsByName(t.config.formInputFileName).value='';
		},
		'device':function(){
			//获取设备信息
			var sys = {};
			var ua = navigator.userAgent.toLowerCase();
			var s;
			(s = ua.match(/edge\/([\d.]+)/)) ? sys.edge = s[1] :
			(s = ua.match(/rv:([\d.]+)\) like gecko/)) ? sys.ie = s[1] :
			(s = ua.match(/msie ([\d.]+)/)) ? sys.ie = s[1] :
			(s = ua.match(/firefox\/([\d.]+)/)) ? sys.firefox = s[1] :
			(s = ua.match(/chrome\/([\d.]+)/)) ? sys.chrome = s[1] :
			(s = ua.match(/opera.([\d.]+)/)) ? sys.opera = s[1] :
			(s = ua.match(/version\/([\d.]+).*safari/)) ? sys.safari = s[1] : 0;
			if (sys.edge) return { broswer : "Edge", version : sys.edge };
			if (sys.ie) return { broswer : "IE", version : sys.ie };
			if (sys.firefox) return { broswer : "Firefox", version : sys.firefox };
			if (sys.chrome) return { broswer : "Chrome", version : sys.chrome };
			if (sys.opera) return { broswer : "Opera", version : sys.opera };
			if (sys.safari) return { broswer : "Safari", version : sys.safari };
			return { broswer : "", version : "0" };
		}
	}
	w._hcinits._uploadfile=_uploads;
}(window)